/*
 * Copyright 2009-2010 Nanjing RedOrange ltd (http://www.red-orange.cn)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package redora.api;

import org.jetbrains.annotations.NotNull;

import java.util.Collections;

/**
 * Persistable object with sort order.
 * The Persistable has a sortOrder field which allows the user to sort the
 * Persistables manually<br>
 * You can of course still sort the Persistable pojo's using
 * Collections.sort() on any Comparable you have created. Or in the object
 * model you can define sort attributes. The sort attributes will be sorted
 * by the SQL query.
 * <br>
 * Redora generates Pojo's implementing this interface when it has the
 * sorted=true tag. See the manual for more information about the object model.
 *
 * @see PersistableSortedList
 * @see Collections#sort(java.util.List, java.util.Comparator)
 * @author Nanjing RedOrange (http://www.red-orange.cn)
 */
public interface SortedPersistable extends Persistable, Comparable {
    /**
     * @return Positive incremental number starting from 0.
     */
    @NotNull
    public Integer getSortOrder();

    /**
     * @param sortOrder Usually set by the implementation of PersistableSortedList
     */
    public void setSortOrder(@NotNull Integer sortOrder);
}
